"JULY LISTING 6" AS SAVED ON DISK
0800              1           TTL "Listing 6 : IF and FOR Demo"
0800              2  ;
0800              3  ;
0800              4  ;
0800              5  **********************************
0800              6  *                                *
0800              7  *       SPEED/ASM Equates        *
0800              8  *                                *
0800              9  **********************************
0800             10  ;
0800             11  ;
0800             12  ;
0800             13  ;
0800             14  ;
0800             15  ;
0800             16  ;
0800             17  ;
0800             18  *************
0800             19  * CONSTANTS *
0800             20  *************
0800             21  ;
0800             22  ;
0800             23  ;
0800             24  ; The following symbols are constants
0800             25  ; for the values "FALSE", "TRUE", and
0800             26  ; Carriage Return (respectively).
0800             27  ;
0800             28  ; These symbols should only appear
0800             29  ; as immediate operands to a 6502
0800             30  ; instruction or in the operand field
0800             31  ; of a pseudo-opcode like BYT
0800             32  ;
0800             33  ;
0800             34  ;
0800             35  ;
0800             36  ;
0000             37  FALSE    EQU 0
0001             38  TRUE     EQU 1
008D             39  CR       EQU $8D
0087             40  BELL     EQU $87
0800             41  ;
0800             42  ;
0800             43  ;
0800             44  ;
0800             45  ;
0800             46  ;
0800             47  ; "IF" STATEMENT EQUATES
0800             48  ;
0800             49  ; The following symbols should only
0800             50  ; be used in the ADR pseudo-opcode
0800             51  ; following a call to the SPEED/ASM
0800             52  ; IFx routines.
0800             53  ;
0800             54  ;
0800             55  ;
00BD             56  EQ       EQU "="
00A3             57  NE       EQU "#"
00BE             58  GT       EQU ">"
00BC             59  LT       EQU "<"
BDBE             60  GE       EQU ">"|"="*256
BDBC             61  LE       EQU "<"|"="*256
0800             62  ;
0800             63  ;
0800             64  ;
0800             65  ;
0800             66  ;
0800             67  ;
0800             68  ;
0800             69  **************************
0800             70  * SPEED/ASM ENTRY POINTS *
0800             71  **************************
0800             72  ;
0800             73  ;
0800             74  ;
0800             75  ;
0800             76  ; NOTE: THE EQUATE OF PUTC MUST
0800             77  ; BE CHANGED IF YOU RELOCATE
0800             78  ; SPEED/ASM TO SOME LOCATION
0800             79  ; OTHER THAN $7800
0800             80  ;
0800             81  ;
0800             82  ;
7800             83  PUTC     EQU $7800
7803             84  GETC     EQU PUTC+3
7806             85  SAGL     EQU GETC+3          ;FOR USE BY S/A ONLY- SEE DOC.
7809             86  SAPC     EQU SAGL+3          ; "   "   "  "   "     "   "
780C             87  HOME     EQU SAPC+3          ;HOME AND CLEAR
780F             88  READLN   EQU HOME+3
7812             89  INIT     EQU READLN+3
7815             90  FOR      EQU INIT+3
7818             91  FOR0     EQU FOR+3
781B             92  NEXT     EQU FOR0+3
781E             93  IFI      EQU NEXT+3
7821             94  IFI0     EQU IFI+3
7824             95  IFS      EQU IFI0+3
7827             96  IFS0     EQU IFS+3
782A             97  MOVE     EQU IFS0+3
782D             98  LOAD     EQU MOVE+3
7830             99  MOVS     EQU LOAD+3
7833            100  LDSTR    EQU MOVS+3
7836            101  PRINT    EQU LDSTR+3
7839            102  PRTSTR   EQU PRINT+3
783C            103  PRTINT   EQU PRTSTR+3
783F            104  RDSTR    EQU PRTINT+3
7842            105  RDINT    EQU RDSTR+3
7845            106  ONXGOTO  EQU RDINT+3
7848            107  CASE     EQU ONXGOTO+3
784B            108  CASEI    EQU CASE+3
784E            109  INSET    EQU CASEI+3
7851            110  NOTINSET EQU INSET+3
7854            111  ABS      EQU NOTINSET+3
7857            112  NEG      EQU ABS+3
785A            113  MUL      EQU NEG+3
785D            114  DIV      EQU MUL+3
7860            115  MOD      EQU DIV+3
0800            116  ;
0800            117  ;
0800            118  ;
0800            119  ; Apple DOS Equate:
0800            120  ;
03EA            121  INITDOS  EQU $3EA            ; DOS init routine
0084            122  CTLD     EQU $84             ; Control-D character
0800            123  ;
0800            124  ;
0800            125  ; Apple Monitor equates
0800            126  ;
FF59            127  EXIT     EQU $FF59
0800            128  ;
0800            129  ;
0800            130  ;
0800            131  ;
0800            132  ;
0800            133  ;
0800            134  *********************************
0800            135  *                               *
0800            136  * IF and FOR demonstration PGM. *
0800            137  *                               *
0800            138  * This program creates a text   *
0800            139  * file on the disk (it's named  *
0800            140  * "NUMBERS") and writes out a   *
0800            141  * series of numbers to the disk.*
0800            142  * The second half of this prog- *
0800            143  * gram read the data back in    *
0800            144  * (in various formats) and dis- *
0800            145  * plays the input info on the   *
0800            146  * screen.                       *
0800            147  *                               *
0800            148  *********************************
0800            149  ;
0800            150  ;
0800            151  ;
0800            152  ;
0800            153  ;
0800            154  ; Initialization section:
0800            155  ;
0800            156  ;
0800            157  ;
0800 20 12 78   158  SA.PGM.4 JSR INIT            ; Always do this first!
0803            159  ;
0803            160  ;
0803            161  ; The following call activates Apple DOS by
0803            162  ; "reconnecting" the input/output
0803            163  ; hooks at locations $36..$39 (See
0803            164  ; "Beneath Apple DOS" page 5-5).
0803            165  ;
0803 20 EA 03   166           JSR INITDOS
0806            167  ;
0806            168  ;
0806            169  ; Emulate the BASIC statements:
0806            170  ;
0806            171  ;  PRINT CHR$(4);"NOMON O.I.C"
0806            172  ;
0806 20 36 78   173           JSR PRINT
0809 8D 84 CE   174           BYT CR,CTLD,"NOMON O,I,C",CR,0
080C CF CD CF 
080F CE A0 CF 
0812 AC C9 AC 
0815 C3 8D 00 
0818            175  ;
0818            176  ;
0818            177  ;
0818            178  ;
0818            179  ******************************************
0818            180  ;
0818            181  ; File creation section:
0818            182  ;
0818            183  ;
0818            184  ;
0818            185  ; Open the file "NUMBERS" in the typical
0818            186  ; Apple DOS fashion. Note that a
0818            187  ; carriage return is printed first
0818            188  ; in order to insure that the DOS
0818            189  ;  command is recognized.
0818            190  ;
0818            191  ;
0818 20 36 78   192           JSR PRINT
081B 8D 84 CF   193           BYT CR,CTLD,"OPEN NUMBERS,S6,D1,L8",CR,0
081E D0 C5 CE 
0821 A0 CE D5 
0824 CD C2 C5 
0827 D2 D3 AC 
082A D3 B6 AC 
082D C4 B1 AC 
0830 CC B8 8D 
0833 00 
0834            194  ;
0834 20 18 78   195           JSR FOR0
0837 63 0D 01   196           ADR I,1,10
083A 00 0A 00 
083D            197  ;
083D            198  ;
083D            199  ; Emulate the BASIC statement:
083D            200  ;
083D            201  ; PRINT CHR$(4);"WRITE NUMBERS,R";I;",B0"
083D            202  ;
083D 20 36 78   203           JSR PRINT
0840 84 D7 D2   204           BYT CTLD,"WRITE NUMBERS,R",0
0843 C9 D4 C5 
0846 A0 CE D5 
0849 CD C2 C5 
084C D2 D3 AC 
084F D2 00 
0851 20 3C 78   205           JSR PRTINT
0854 63 0D      206           ADR I
0856 20 36 78   207           JSR PRINT
0859 AC C2 B0   208           BYT ",B0",CR,0
085C 8D 00 
085E            209  ;
085E            210  ;
085E            211  ; Now output the value I to the textfile
085E            212  ;
085E            213  ; This code emulates the BASIC statement:
085E            214  ;
085E            215  ;   PRINT I
085E            216  ;
085E            217  ;
085E 20 3C 78   218           JSR PRTINT
0861 63 0D      219           ADR I
0863 A9 8D      220           LDA #CR             ; Output a CR to finish
0865 20 00 78   221           JSR PUTC            ; off the line
0868            222  ;
0868            223  ;
0868            224  ; Repeat for 10 numbers
0868            225  ;
0868 20 1B 78   226           JSR NEXT
086B            227  ;
086B            228  ;
086B            229  ; At this point a random access file
086B            230  ; has been created with 100 records.
086B            231  ; Each record contains the record
086B            232  ; number of that particular record.
086B            233  ; To insure the integrity of the
086B            234  ; file, it must be closed. The following
086B            235  ; SPEED/ASM code emulates the BASIC
086B            236  ; code:
086B            237  ;
086B            238  ;   PRINT CHR$(4); "CLOSE NUMBERS"
086B            239  ;
086B 20 36 78   240           JSR PRINT
086E 84 C3 CC   241           BYT CTLD,"CLOSE NUMBERS",CR,0
0871 CF D3 C5 
0874 A0 CE D5 
0877 CD C2 C5 
087A D2 D3 8D 
087D 00 
087E            242  ;
087E            243  ;
087E            244  *** End of file creation section.
087E            245  ;
087E            246  ;
087E            247  ;
087E            248  ;
087E            249  **********************************
087E            250  ;
087E            251  ;
087E            252  ; The following section re-opens
087E            253  ; the text file just created and
087E            254  ; prints the records onto the screen
087E            255  ; This verifies proper operation
087E            256  ; of the file creation process.
087E            257  ;
087E            258  ;
087E            259  ;
087E 20 36 78   260           JSR PRINT
0881 8D D6 E5   261           BYT CR,"Verifying Records",CR,CR,0
0884 F2 E9 E6 
0887 F9 E9 EE 
088A E7 A0 D2 
088D E5 E3 EF 
0890 F2 E4 F3 
0893 8D 8D 00 
0896            262  ;
0896            263  ;
0896 20 36 78   264           JSR PRINT
0899 8D 84 CF   265           BYT CR,CTLD,"OPEN NUMBERS,L8",CR,0
089C D0 C5 CE 
089F A0 CE D5 
08A2 CD C2 C5 
08A5 D2 D3 AC 
08A8 CC B8 8D 
08AB 00 
08AC            266  ;
08AC 20 18 78   267           JSR FOR0
08AF 63 0D 01   268           ADR I,1,10
08B2 00 0A 00 
08B5            269  ;
08B5 20 36 78   270           JSR PRINT
08B8 84 D2 C5   271           BYT CTLD,"READ NUMBERS,R",0
08BB C1 C4 A0 
08BE CE D5 CD 
08C1 C2 C5 D2 
08C4 D3 AC D2 
08C7 00 
08C8 20 3C 78   272           JSR PRTINT
08CB 63 0D      273           ADR I
08CD 20 36 78   274           JSR PRINT
08D0 AC C2 B0   275           BYT ",B0",CR,0
08D3 8D 00 
08D5            276  ;
08D5 20 0F 78   277           JSR READLN          ; Force a new line to be read.
08D8 20 42 78   278           JSR RDINT
08DB 65 0D      279           ADR J
08DD            280  ;
08DD            281  ; Print the record's value.
08DD            282  ;
08DD 20 36 78   283           JSR PRINT
08E0 D2 E5 E3   284           BYT "Record number ",0
08E3 EF F2 E4 
08E6 A0 EE F5 
08E9 ED E2 E5 
08EC F2 A0 00 
08EF 20 3C 78   285           JSR PRTINT
08F2 63 0D      286           ADR I
08F4 20 36 78   287           JSR PRINT
08F7 A0 E3 EF   288           BYT " contained '",0
08FA EE F4 E1 
08FD E9 EE E5 
0900 E4 A0 A7 
0903 00 
0904 20 3C 78   289           JSR PRTINT
0907 65 0D      290           ADR J
0909 20 36 78   291           JSR PRINT
090C A7 8D 00   292           BYT "'",CR,0
090F            293  ;
090F            294  ; Move on to the next record.
090F            295  ;
090F 20 1B 78   296           JSR NEXT
0912            297  ;
0912            298  ;
0912            299  ; ** End of record verification.
0912            300  ;
0912            301  ;
0912            302  *********************************
0912            303  ;
0912            304  ; Now print the file out backwards
0912            305  ;
0912            306  ;
0912            307  ;
0912 20 36 78   308           JSR PRINT
0915 8D D2 E5   309           BYT CR,"Reading records in reverse order",CR,CR,0
0918 E1 E4 E9 
091B EE E7 A0 
091E F2 E5 E3 
0921 EF F2 E4 
0924 F3 A0 E9 
0927 EE A0 F2 
092A E5 F6 E5 
092D F2 F3 E5 
0930 A0 EF F2 
0933 E4 E5 F2 
0936 8D 8D 00 
0939            310  ;
0939 4C 42 09   311           JMP DOFOR           ; Hide the following constants
093C            312  ;
093C FF FF      313  CM1      ADR !-1
093E 01 00      314  C1       ADR 1
0940 0A 00      315  C10      ADR 10
0942            316  ;
0942            317  ;
0942 20 15 78   318  DOFOR    JSR FOR
0945 63 0D 40   319           ADR I,C10,C1,CM1    ; Stepsize of -1
0948 09 3E 09 
094B 3C 09 
094D            320  ;
094D 20 36 78   321           JSR PRINT
0950 84 D2 C5   322           BYT CTLD,"READ NUMBERS,R",0
0953 C1 C4 A0 
0956 CE D5 CD 
0959 C2 C5 D2 
095C D3 AC D2 
095F 00 
0960 20 3C 78   323           JSR PRTINT
0963 63 0D      324           ADR I
0965 20 36 78   325           JSR PRINT
0968 AC C2 B0   326           BYT ",B0",CR,0
096B 8D 00 
096D            327  ;
096D 20 0F 78   328           JSR READLN          ; Fetch a new line
0970 20 42 78   329           JSR RDINT
0973 65 0D      330           ADR J
0975            331  ;
0975 20 36 78   332           JSR PRINT
0978 D2 E5 E3   333           BYT "Record number ",0
097B EF F2 E4 
097E A0 EE F5 
0981 ED E2 E5 
0984 F2 A0 00 
0987 20 3C 78   334           JSR PRTINT
098A 63 0D      335           ADR I
098C 20 36 78   336           JSR PRINT
098F A0 E3 EF   337           BYT " contained '",0
0992 EE F4 E1 
0995 E9 EE E5 
0998 E4 A0 A7 
099B 00 
099C 20 3C 78   338           JSR PRTINT
099F 65 0D      339           ADR J
09A1 20 36 78   340           JSR PRINT
09A4 A7 8D 00   341           BYT "'",CR,0
09A7            342  ;
09A7 20 1B 78   343           JSR NEXT
09AA            344  ;
09AA            345  ;
09AA            346  **********************************
09AA            347  ;
09AA            348  ;
09AA            349  ; Now get the bounds for output
09AA            350  ; from the keyboard.
09AA            351  ;
09AA 20 36 78   352           JSR PRINT           ; This turn off the DOS
09AD 8D 84 8D   353           BYT CR,CTLD,CR,0    ; READ mode.
09B0 00 
09B1            354  ;
09B1 20 36 78   355  REREAD0  JSR PRINT
09B4 C9 EE F0   356           BYT "Input a lower bounds:",0 ; Get first record #
09B7 F5 F4 A0 
09BA E1 A0 EC 
09BD EF F7 E5 
09C0 F2 A0 E2 
09C3 EF F5 EE 
09C6 E4 F3 BA 
09C9 00 
09CA            357  ;
09CA 20 0F 78   358           JSR READLN
09CD 20 42 78   359           JSR RDINT
09D0 67 0D      360           ADR FIRST
09D2 70 DD      361           BVS REREAD0
09D4            362  ; FIRST must be greater than zero
09D4            363  ; and less than or equal to 10.
09D4            364  ;
09D4 20 21 78   365           JSR IFI0
09D7 67 0D BE   366           ADR FIRST,GT,0
09DA 00 00 00 
09DD D0 29      367           BTR FIRSTOK0
09DF            368  ;
09DF 20 36 78   369           JSR PRINT
09E2 8D 87 D6   370           BYT CR,BELL,"Value must be greater than zero",CR,0
09E5 E1 EC F5 
09E8 E5 A0 ED 
09EB F5 F3 F4 
09EE A0 E2 E5 
09F1 A0 E7 F2 
09F4 E5 E1 F4 
09F7 E5 F2 A0 
09FA F4 E8 E1 
09FD EE A0 FA 
0A00 E5 F2 EF 
0A03 8D 00 
0A05 4C B1 09   371           JMP REREAD0
0A08            372  ;
0A08 20 21 78   373  FIRSTOK0 JSR IFI0
0A0B 67 0D BC   374           ADR FIRST,LE,10
0A0E BD 0A 00 
0A11 D0 24      375           BTR FIRSTOK1
0A13            376  ;
0A13 20 36 78   377           JSR PRINT
0A16 8D 87 D6   378           BYT CR,BELL,"Value must be less than 11",CR,0
0A19 E1 EC F5 
0A1C E5 A0 ED 
0A1F F5 F3 F4 
0A22 A0 E2 E5 
0A25 A0 EC E5 
0A28 F3 F3 A0 
0A2B F4 E8 E1 
0A2E EE A0 B1 
0A31 B1 8D 00 
0A34 4C B1 09   379           JMP REREAD0
0A37            380  ;
0A37            381  ;
0A37            382  FIRSTOK1:
0A37 20 36 78   383  REREAD1  JSR PRINT
0A3A 8D C5 EE   384           BYT CR,"Enter the final value:",0
0A3D F4 E5 F2 
0A40 A0 F4 E8 
0A43 E5 A0 E6 
0A46 E9 EE E1 
0A49 EC A0 F6 
0A4C E1 EC F5 
0A4F E5 BA 00 
0A52            385  ;
0A52 20 0F 78   386           JSR READLN
0A55 20 42 78   387           JSR RDINT
0A58 69 0D      388           ADR ENDVAL
0A5A 70 DB      389           BVS REREAD1         ; In case of error
0A5C            390  ;
0A5C            391  ; Check to make sure that ENDVAL is
0A5C            392  ; in the range 1..10.
0A5C            393  ;
0A5C 20 21 78   394           JSR IFI0
0A5F 69 0D BE   395           ADR ENDVAL,GT,0
0A62 00 00 00 
0A65 D0 30      396           BTR ENDOK0
0A67            397  ;
0A67 20 36 78   398           JSR PRINT
0A6A 8D 87 C5   399           BYT CR,BELL,"Ending value must be greater than zero",CR,0
0A6D EE E4 E9 
0A70 EE E7 A0 
0A73 F6 E1 EC 
0A76 F5 E5 A0 
0A79 ED F5 F3 
0A7C F4 A0 E2 
0A7F E5 A0 E7 
0A82 F2 E5 E1 
0A85 F4 E5 F2 
0A88 A0 F4 E8 
0A8B E1 EE A0 
0A8E FA E5 F2 
0A91 EF 8D 00 
0A94 4C 37 0A   400           JMP REREAD1
0A97            401  ;
0A97 20 21 78   402  ENDOK0   JSR IFI0
0A9A 69 0D BC   403           ADR ENDVAL,LE,10
0A9D BD 0A 00 
0AA0 D0 2A      404           BTR ENDOK1
0AA2            405  ;
0AA2 20 36 78   406           JSR PRINT
0AA5 8D 87 C5   407           BYT CR,BELL,"Ending value must be less than 11",0
0AA8 EE E4 E9 
0AAB EE E7 A0 
0AAE F6 E1 EC 
0AB1 F5 E5 A0 
0AB4 ED F5 F3 
0AB7 F4 A0 E2 
0ABA E5 A0 EC 
0ABD E5 F3 F3 
0AC0 A0 F4 E8 
0AC3 E1 EE A0 
0AC6 B1 B1 00 
0AC9 4C 37 0A   408           JMP REREAD1
0ACC            409  ;
0ACC            410  ;
0ACC            411  ; Now get a stepsize value from the user.
0ACC            412  ;
0ACC            413  ENDOK1:
0ACC 20 36 78   414  REREAD2  JSR PRINT
0ACF 8D C5 EE   415           BYT CR,"Enter a stepsize value:",0
0AD2 F4 E5 F2 
0AD5 A0 E1 A0 
0AD8 F3 F4 E5 
0ADB F0 F3 E9 
0ADE FA E5 A0 
0AE1 F6 E1 EC 
0AE4 F5 E5 BA 
0AE7 00 
0AE8            416  ;
0AE8 20 0F 78   417           JSR READLN
0AEB 20 42 78   418           JSR RDINT
0AEE 6B 0D      419           ADR STEPSIZE
0AF0 70 DA      420           BVS REREAD2
0AF2            421  ;
0AF2            422  ; The stepsize must be checked to
0AF2            423  ; make sure that it matches the
0AF2            424  ; following conditions:
0AF2            425  ;
0AF2            426  ; It must be in the range 1..10
0AF2            427  ;   or   -1..-10.
0AF2            428  ;
0AF2            429  ; If ENDVAL is greater than FIRST,
0AF2            430  ;   STEPSIZE   must be positive.
0AF2            431  ;
0AF2            432  ; If ENDVAL is less than FIRST,
0AF2            433  ;   STEPSIZE   must be negative.
0AF2            434  ;
0AF2            435  ;
0AF2 20 21 78   436           JSR IFI0
0AF5 6B 0D BD   437           ADR STEPSIZE,EQ,0
0AF8 00 00 00 
0AFB F0 26      438           BFL SSOK0
0AFD            439  ;
0AFD 20 36 78   440           JSR PRINT
0B00 8D 87 D3   441           BYT CR,BELL,"Stepsize must not equal zero",CR,0
0B03 F4 E5 F0 
0B06 F3 E9 FA 
0B09 E5 A0 ED 
0B0C F5 F3 F4 
0B0F A0 EE EF 
0B12 F4 A0 E5 
0B15 F1 F5 E1 
0B18 EC A0 FA 
0B1B E5 F2 EF 
0B1E 8D 00 
0B20 4C CC 0A   442           JMP REREAD2
0B23            443  ;
0B23            444  ;
0B23 20 21 78   445  SSOK0    JSR IFI0
0B26 6B 0D BE   446           ADR STEPSIZE,GT,0
0B29 00 00 00 
0B2C F0 78      447           BFL SSISNEG
0B2E            448  ;
0B2E            449  ; STEPSIZE > 0, make sure that ENDVAL >= FIRST.
0B2E            450  ;
0B2E 20 1E 78   451           JSR IFI
0B31 69 0D BE   452           ADR ENDVAL,GE,FIRST
0B34 BD 67 0D 
0B37 D0 23      453           BTR CHKPOSSS
0B39            454  ;
0B39 20 36 78   455           JSR PRINT
0B3C 8D 87 D3   456           BYT CR,BELL,"STEPSIZE must be negative",CR,0
0B3F D4 C5 D0 
0B42 D3 C9 DA 
0B45 C5 A0 ED 
0B48 F5 F3 F4 
0B4B A0 E2 E5 
0B4E A0 EE E5 
0B51 E7 E1 F4 
0B54 E9 F6 E5 
0B57 8D 00 
0B59 4C CC 0A   457           JMP REREAD2
0B5C            458  ;
0B5C            459  ; Make sure that STEPSIZE is in the range 1..10.
0B5C            460  ;
0B5C 20 21 78   461  CHKPOSSS JSR IFI0
0B5F 6B 0D BE   462           ADR STEPSIZE,GE,1
0B62 BD 01 00 
0B65 8D 6D 0D   463           STA BOOLEAN         ; Save for compound test.
0B68 20 21 78   464           JSR IFI0
0B6B 6B 0D BC   465           ADR STEPSIZE,LE,10
0B6E BD 0A 00 
0B71 2D 6D 0D   466           AND BOOLEAN
0B74 F0 03      467           BFL BADSS
0B76 4C 1E 0C   468           JMP GOODSS
0B79            469  ;
0B79            470  ;
0B79 20 36 78   471  BADSS    JSR PRINT
0B7C 8D 87 D3   472           BYT CR,BELL,"STEPSIZE must be in the range 1..10",CR,0
0B7F D4 C5 D0 
0B82 D3 C9 DA 
0B85 C5 A0 ED 
0B88 F5 F3 F4 
0B8B A0 E2 E5 
0B8E A0 E9 EE 
0B91 A0 F4 E8 
0B94 E5 A0 F2 
0B97 E1 EE E7 
0B9A E5 A0 B1 
0B9D AE AE B1 
0BA0 B0 8D 00 
0BA3 4C CC 0A   473           JMP REREAD2
0BA6            474  ;
0BA6            475  ;
0BA6            476  ;
0BA6            477  ; STEPSIZE < 0, make sure that ENDVAL <= FIRST.
0BA6            478  ;
0BA6 20 1E 78   479  SSISNEG  JSR IFI
0BA9 69 0D BC   480           ADR ENDVAL,LE,FIRST
0BAC BD 67 0D 
0BAF D0 24      481           BTR CHKNEGSS
0BB1            482  ;
0BB1 20 36 78   483           JSR PRINT
0BB4 8D 87 D3   484           BYT CR,BELL,"STEPSIZE must be positive.",CR,0
0BB7 D4 C5 D0 
0BBA D3 C9 DA 
0BBD C5 A0 ED 
0BC0 F5 F3 F4 
0BC3 A0 E2 E5 
0BC6 A0 F0 EF 
0BC9 F3 E9 F4 
0BCC E9 F6 E5 
0BCF AE 8D 00 
0BD2 4C CC 0A   485           JMP REREAD2
0BD5            486  ;
0BD5            487  ;
0BD5            488  ; Make sure that STEPSIZE is in the range -10..-1.
0BD5            489  ;
0BD5 20 21 78   490  CHKNEGSS JSR IFI0
0BD8 6B 0D BE   491           ADR STEPSIZE,GE,!-10
0BDB BD F6 FF 
0BDE 8D 6D 0D   492           STA BOOLEAN         ; Save for compound test
0BE1 20 21 78   493           JSR IFI0
0BE4 6B 0D BC   494           ADR STEPSIZE,LE,!-1
0BE7 BD FF FF 
0BEA 2D 6D 0D   495           AND BOOLEAN
0BED D0 2F      496           BTR GOODSS
0BEF            497  ;
0BEF 20 36 78   498           JSR PRINT
0BF2 8D 87 D3   499           BYT CR,BELL,"STEPSIZE must be in the range -1..-10",CR,0
0BF5 D4 C5 D0 
0BF8 D3 C9 DA 
0BFB C5 A0 ED 
0BFE F5 F3 F4 
0C01 A0 E2 E5 
0C04 A0 E9 EE 
0C07 A0 F4 E8 
0C0A E5 A0 F2 
0C0D E1 EE E7 
0C10 E5 A0 AD 
0C13 B1 AE AE 
0C16 AD B1 B0 
0C19 8D 00 
0C1B 4C CC 0A   500           JMP REREAD2
0C1E            501  ;
0C1E            502  ;
0C1E            503  ; If STEPSIZE contains an appropriate value
0C1E            504  ; print the records as requested.
0C1E            505  ;
0C1E            506  ;
0C1E A9 8D      507  GOODSS   LDA #CR
0C20 20 00 78   508           JSR PUTC            ; Init for DOS*
0C23            509  ;
0C23 20 15 78   510           JSR FOR
0C26 63 0D 67   511           ADR I,FIRST,ENDVAL,STEPSIZE
0C29 0D 69 0D 
0C2C 6B 0D 
0C2E            512  ;
0C2E            513  ; Read the specified record
0C2E            514  ;
0C2E 20 36 78   515           JSR PRINT
0C31 84 D2 C5   516           BYT CTLD,"READ NUMBERS,R",0
0C34 C1 C4 A0 
0C37 CE D5 CD 
0C3A C2 C5 D2 
0C3D D3 AC D2 
0C40 00 
0C41 20 3C 78   517           JSR PRTINT
0C44 63 0D      518           ADR I
0C46 20 36 78   519           JSR PRINT
0C49 AC C2 B0   520           BYT ",B0",CR,0
0C4C 8D 00 
0C4E            521  ;
0C4E 20 0F 78   522           JSR READLN
0C51 20 42 78   523           JSR RDINT
0C54 65 0D      524           ADR J
0C56            525  ;
0C56            526  ;
0C56 20 1E 78   527           JSR IFI
0C59 63 0D BD   528           ADR I,EQ,FIRST
0C5C 00 67 0D 
0C5F F0 21      529           BFL >0
0C61            530  ;
0C61 20 36 78   531           JSR PRINT
0C64 D4 E8 E5   532           BYT "The first record contains ",0
0C67 A0 E6 E9 
0C6A F2 F3 F4 
0C6D A0 F2 E5 
0C70 E3 EF F2 
0C73 E4 A0 E3 
0C76 EF EE F4 
0C79 E1 E9 EE 
0C7C F3 A0 00 
0C7F 4C 25 0D   533           JMP PRTREC
0C82            534  ;
0C82 20 1E 78   535  ^0       JSR IFI
0C85 63 0D BD   536           ADR I,EQ,ENDVAL
0C88 00 69 0D 
0C8B F0 20      537           BFL >1
0C8D            538  ;
0C8D 20 36 78   539           JSR PRINT
0C90 D4 E8 E5   540           BYT "The last record contains ",0
0C93 A0 EC E1 
0C96 F3 F4 A0 
0C99 F2 E5 E3 
0C9C EF F2 E4 
0C9F A0 E3 EF 
0CA2 EE F4 E1 
0CA5 E9 EE F3 
0CA8 A0 00 
0CAA 4C 25 0D   541           JMP PRTREC
0CAD            542  ;
0CAD            543  ;
0CAD 20 21 78   544  ^1       JSR IFI0
0CB0 63 0D BD   545           ADR I,EQ,2
0CB3 00 02 00 
0CB6 F0 1F      546           BFL >2
0CB8            547  ;
0CB8 20 36 78   548           JSR PRINT
0CBB D4 E8 E5   549           BYT "The 2nd record contains ",0
0CBE A0 B2 EE 
0CC1 E4 A0 F2 
0CC4 E5 E3 EF 
0CC7 F2 E4 A0 
0CCA E3 EF EE 
0CCD F4 E1 E9 
0CD0 EE F3 A0 
0CD3 00 
0CD4 4C 25 0D   550           JMP PRTREC
0CD7            551  ;
0CD7 20 21 78   552  ^2       JSR IFI0
0CDA 63 0D BD   553           ADR I,EQ,3
0CDD 00 03 00 
0CE0 F0 1F      554           BFL >3
0CE2            555  ;
0CE2 20 36 78   556           JSR PRINT
0CE5 D4 E8 E5   557           BYT "The 3rd record contains ",0
0CE8 A0 B3 F2 
0CEB E4 A0 F2 
0CEE E5 E3 EF 
0CF1 F2 E4 A0 
0CF4 E3 EF EE 
0CF7 F4 E1 E9 
0CFA EE F3 A0 
0CFD 00 
0CFE 4C 25 0D   558           JMP PRTREC
0D01            559  ;
0D01            560  ;
0D01 20 36 78   561  ^3       JSR PRINT
0D04 D4 E8 E5   562           BYT "The ",0
0D07 A0 00 
0D09 20 3C 78   563           JSR PRTINT
0D0C 63 0D      564           ADR I
0D0E 20 36 78   565           JSR PRINT
0D11 F4 E8 A0   566           BYT "th record contains ",0
0D14 F2 E5 E3 
0D17 EF F2 E4 
0D1A A0 E3 EF 
0D1D EE F4 E1 
0D20 E9 EE F3 
0D23 A0 00 
0D25            567  ;
0D25            568  ;
0D25 20 36 78   569  PRTREC   JSR PRINT
0D28 BA A0 A0   570           BYT ":  '",0
0D2B A7 00 
0D2D 20 3C 78   571           JSR PRTINT
0D30 65 0D      572           ADR J
0D32 20 36 78   573           JSR PRINT
0D35 A7 8D 00   574           BYT "'",CR,0
0D38            575  ;
0D38            576  ;
0D38 20 1B 78   577           JSR NEXT
0D3B            578  ;
0D3B            579  ;
0D3B            580  **********************************
0D3B            581  ;
0D3B            582  ;
0D3B            583  ;  All Done..,
0D3B            584  ;
0D3B 20 36 78   585           JSR PRINT
0D3E 8D 8D 8D   586           BYT CR,CR,CR,"That's all folks!",CR,0
0D41 D4 E8 E1 
0D44 F4 A7 F3 
0D47 A0 E1 EC 
0D4A EC A0 E6 
0D4D EF EC EB 
0D50 F3 A1 8D 
0D53 00 
0D54            587  ;
0D54            588  ;
0D54            589  ;
0D54            590  ; Close all open files*
0D54            591  ;
0D54 20 36 78   592           JSR PRINT
0D57 8D 84 C3   593           BYT CR,CTLD,"CLOSE",CR,0
0D5A CC CF D3 
0D5D C5 8D 00 
0D60            594  ;
0D60            595  ;
0D60 4C 59 FF   596           JMP EXIT
0D63            597  ;
0D63            598  ;
0D63            599  ; Variable declarations
0D63            600  ;
0D63            601  ;
0D63 00 00      602  I        ADR 0
0D65 00 00      603  J        ADR 0
0D67 00 00      604  FIRST    ADR 0
0D69 00 00      605  ENDVAL   ADR 0
0D6B 00 00      606  STEPSIZE ADR 0
0D6D 00         607  BOOLEAN  BYT 0
0D6E            608  ;
0D6E            609  ;
0D6E            610           END